import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}

object SparkSql {
  def main(args: Array[String]){
    val conf = new SparkConf().setAppName("SQLOnSpark").setMaster("local")    //建立sparksqlconf对象，setmaster是为了本地运行调试，如果要上传集群则不需要
//    conf.set("spark.driver.memory","571859200")   如果JVM的内存不够就添加这个设置，提高spark的内存；也有可能是你设置系统JVM内存参数过低，这时候就要修改环境变量，增加如下配置：
//    export JAVA_OPTS="-Xmx656M -Xms600M"  mx最大的JVM内存，ms最小的JVM内存
    val sc = new SparkContext(conf)   // 建立sparkContext对象
    val sqlContext = new SQLContext(sc);    // 建立sqlContext对象
    val vehicleData = sqlContext.read.json("hdfs://192.168.200.200:9000/data/vehicleData.json")    // 从hdfs内读入json文件
    vehicleData.createOrReplaceTempView("t_vehicle")    //注册成表
    val result = sqlContext.sql("select error,count,error_type from t_vehicle where SZVIN = 'LA9HIGECXH1HGC014'")     // 执行SQL并获取结果
    result.rdd.map(r=>"row:"+r(0).toString+"---"+r(1)+"---"+r(2)).collect().foreach(println)    // 打印结果：r(0) 这个字段由于有"*"符号，容易报错，所以先处理成字符串

  }
}
